编译 WebRTC Android AAR

2024-04-01
  1. Linux 系统,确保电脑能科学上网,并配置命令行 http 代理!

  2. 安装 depot_tools,并配置环境变量:

    https://webrtc.googlesource.com/src/+/main/docs/native-code/android/README.md

  3. 创建工作目录(确保磁盘可用空间足够,建议至少预留50G吧),并进入,执行:

    1
    2
    $ fetch --nohooks webrtc_android
    $ gclient sync

    这一步时间很长很长,请耐心等待。

  4. 确定需要编译的 WebRTC 版本:

    https://chromiumdash.appspot.com/branches

  5. 这里以 M123 为例,切换到 M123 所在分支,并同步:

    1
    2
    3
    4
    5
    $ cd src
    $ git checkout -b m123/6312 branch-heads/6312
    $ cd ..
    $ gclient sync --nohooks
    $ gclient runhooks

    如果再次切换分支,例如,从 M123 切换到 M114,再次同步的时候,可能会报错:

    Error: Command ‘git -c core.deltaBaseCacheLimit=2g fetch origin debe7d2d1982e540fbd6bd78604bf001753f9e74 –no-tags’ returned non-zero exit status 128 in /home/eco/Disk/Documents/webrtc_android/src/third_party/libFuzzer/src

    网上好多都说配置 git config –global http.postBuffer 1048576000 之类的,可是我试了并没有卵用,最后是把出问题的目录删除,例如上面的错就是把 third_party/libFuzzer/src 删除,再重新 gcient sync –nohooks 即可。

  6. 安装编译所需的相关依赖:

    1
    2
    $ cd src
    $ ./build/install-build-deps.sh --android
  7. 生成 ninja 项目,确保当前在 src 目录下,执行:

    1
    $ gn gen out/M123/release/arm64 --args='target_os="android" target_cpu="arm64" is_debug=false treat_warnings_as_errors=false'
    • To build for ARM64: use target_cpu="arm64"
    • To build for 32-bit x86: use target_cpu="x86"
    • To build for 64-bit x64: use target_cpu="x64"

    tip: 查看 gn args:gn args --list <dir>

  8. 编译项目:

    1
    $ autoninja -C out/M123/release/arm64 
  9. 编译 AAR:

    1
    $ ./tools_webrtc/android/build_aar.py --build-dir out/aar --arch "armeabi-v7a" "arm64-v8a" --output "out/aar/libwebrtc-M123.aar" --extra-gn-args='treat_warnings_as_errors=false'